package com.wang.springbootinit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wang.springbootinit.model.entity.Student;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 学生数据访问层
 * 继承MyBatis-Plus的BaseMapper，提供基础的数据库操作方法
 */
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
    
    /**
     * 获取所有学生的平均分
     */
    @Select("SELECT student_id, AVG(score) as averageScore FROM score GROUP BY student_id ORDER BY averageScore DESC")
    List<Map<String, Object>> getAllStudentAverageScores();
    
    /**
     * 按班级统计学生人数
     * 统计每个班级的学生总数，并按班级名称排序
     *
     * @return 班级统计结果列表，每个元素包含：
     *         - class_name: 班级名称
     *         - count: 学生数量
     */
    @Select("SELECT class_name, COUNT(*) as count FROM student GROUP BY class_name ORDER BY class_name")
    List<Map<String, Object>> getClassStatistics();
    
    /**
     * 按专业统计学生人数
     * 统计每个专业的学生总数，并按专业名称排序
     *
     * @return 专业统计结果列表，每个元素包含：
     *         - major: 专业名称
     *         - count: 学生数量
     */
    @Select("SELECT major, COUNT(*) as count FROM student GROUP BY major ORDER BY major")
    List<Map<String, Object>> getMajorStatistics();
    
    /**
     * 获取班级的平均成绩
     * 计算每个班级的平均成绩，包括未参加考试的学生
     *
     * @return 班级平均成绩列表，每个元素包含：
     *         - class_name: 班级名称
     *         - avgScore: 平均成绩
     */
    @Select("SELECT s.class_name, AVG(sc.score) as avgScore " +
            "FROM student s " +
            "LEFT JOIN score sc ON s.id = sc.student_id " +
            "GROUP BY s.class_name")
    List<Map<String, Object>> getClassAverageScores();
} 